<template>
  <Card title="访问来源" :loading="loading">
    <div ref="chartRef" :style="{ width, height }"></div>
  </Card>
</template>
<script lang="ts" setup>
  import { Ref, ref, watch } from "vue"
  import { Card } from "ant-design-vue"
  import { useECharts } from "/@/hooks/web/useECharts"
  const props = defineProps({
    loading: Boolean,
    width: {
      type: String as PropType<string>,
      default: "100%",
    },
    height: {
      type: String as PropType<string>,
      default: "300px",
    },
  })
  const chartRef = ref<HTMLDivElement | null>(null)
  const { setOptions } = useECharts(chartRef as Ref<HTMLDivElement>)
  watch(
    () => props.loading,
    () => {
      if (props.loading) {
        return
      }
      setOptions({
        tooltip: {
          trigger: "item",
        },
        legend: {
          bottom: "1%",
          left: "center",
        },
        series: [
          {
            color: ["#5ab1ef", "#b6a2de", "#67e0e3", "#2ec7c9"],
            name: "访问来源",
            type: "pie",
            radius: ["40%", "70%"],
            avoidLabelOverlap: false,
            itemStyle: {
              borderRadius: 10,
              borderColor: "#fff",
              borderWidth: 2,
            },
            label: {
              show: false,
              position: "center",
            },
            emphasis: {
              label: {
                show: true,
                fontSize: "12",
                fontWeight: "bold",
              },
            },
            labelLine: {
              show: false,
            },
            data: [
              { value: 1048, name: "搜索引擎" },
              { value: 735, name: "直接访问" },
              { value: 580, name: "邮件营销" },
              { value: 484, name: "联盟广告" },
            ],
            animationType: "scale",
            animationEasing: "exponentialInOut",
            animationDelay: function () {
              return Math.random() * 100
            },
          },
        ],
      })
    },
    { immediate: true }
  )
</script>
